//
//  UITextView+Extension.swift
//  LJ表情键盘
//
//  Created by Raymond on 15/12/29.
//  Copyright © 2015年 liu. All rights reserved.
//

import UIKit
extension UITextView {
    /**
    输入表情方法
    
    - parameter emociton: 需要输入的模型
    */
    func insertEmoction(emociton: LJEmoction) {
        // 如果点击的时删除按钮
        if emociton.isRemoveEmoction {
            deleteBackward()
        }
        // 如果是emoji表情字节添加
        if let emoji = emociton.emoji {
            insertText(emoji)
            return
        }
        // 添加图片
        if let pngPath = emociton.pngString {
            // 创建附件
            let attachment = LJTextAttachment()
            // 给附件的chs属性赋值
            attachment.chs = emociton.chs
            // 给附件添加图片
            attachment.image = UIImage(contentsOfFile: pngPath)
            // 设置图片大小
            let width = font!.lineHeight
            attachment.bounds = CGRect(x: 0, y: -(width * 0.22), width: width * 1.1, height: width * 1.1)
            // 见附件转化为属性文本
            let attrText = NSMutableAttributedString(attributedString: NSAttributedString(attachment: attachment))
            // 给附件属性文本添加font属性
            attrText.addAttribute(NSFontAttributeName, value: font!, range: NSRange(location: 0, length: 1))
            // 获取当前textview的属性文本,将其转换为可变的
            let currentAttrText = NSMutableAttributedString(attributedString: self.attributedText)
            // 获取选中的位置
            let sRange = self.selectedRange
            currentAttrText.replaceCharactersInRange(sRange, withAttributedString: attrText)
            // 替换当前位置
            self.attributedText = currentAttrText
            // 设置光标位置
            self.selectedRange = NSRange(location: sRange.location + 1, length: 0)
            // 添加表情需要自己发送通知
            NSNotificationCenter.defaultCenter().postNotificationName(UITextViewTextDidChangeNotification, object: self)
            // 自己调用代理
            self.delegate?.textViewDidChange?(self)
        }
    }
    
    func emoctionText() -> String {
        // 用于拼接的文本
        var detText = ""
        // 遍历属性文本里的每一段
        attributedText.enumerateAttributesInRange(NSRange(location: 0, length: attributedText.length), options: NSAttributedStringEnumerationOptions(rawValue: 0)) { (result, range, _) -> Void in
            if let attachment = result["NSAttachment"] as? LJTextAttachment {
                // 图片获取其chs属性
                detText += attachment.chs!
            }else{
                // 直接截取文本
                let text = (self.attributedText.string as NSString).substringWithRange(range)
                
                detText += text
            }
        }
        return detText
    }
}
